package sdk;

import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;

import com.example.dansesshou.jcentertest.MonitorActivity;
import com.hwangjr.rxbus.RxBus;
import com.p2p.core.P2PInterface.IP2P;

import Utils.Contants;
import Utils.DBManager;
import Utils.RxBUSAction;
import entity.AlarmInfo;

/**
 * Created by dxs on 2016/6/13.
 * p2p监控时的回调接口
 */
public class P2PListener implements IP2P {
    /**
     * 被设备呼叫时的回调
     * @param isOutCall
     * @param threeNumber ID号
     * @param type
     */
    @Override
    public void vCalling(boolean isOutCall, String threeNumber, int type, int channelId) {

    }

    /**
     * 设备端挂断时的回调
     * @param deviceId 设备挂断
     * @param reason_code 挂断原因
     */
    @Override
    public void vReject(String deviceId, int reason_code, int exCode1, int exCode2, int channelId) {
        Intent intent = new Intent();
        intent.setAction(MonitorActivity.P2P_REJECT);
        intent.putExtra("reason_code", reason_code);
        intent.putExtra("exCode1", exCode1);
        intent.putExtra("exCode2", exCode2);
        intent.putExtra("channelId", channelId);
        MyApp.app.sendBroadcast(intent);
    }

    /**
     * 设备端接听时的回调,参数需要传给P2PView
     * @param type 视频宽高比例参数
     * @param state 视频宽高比例参数
     */
    @Override
    public void vAccept( int type, int state, int channelId) {
        Intent accept = new Intent();
        accept.setAction(MonitorActivity.P2P_ACCEPT);
        accept.putExtra("channelId", channelId);
        accept.putExtra("type", new int[]{type, state});
        MyApp.app.sendBroadcast(accept);
    }

    /**
     *
     * 准备好传输音视频,一次监控只会被调用一次
     * */
    @Override
    public void vConnectReady(int channelId) {
        Intent intent = new Intent();
        intent.setAction(MonitorActivity.P2P_READY);
        intent.putExtra("channelId", channelId);
        MyApp.app.sendBroadcast(intent);
    }

    @Override
    public void vAllarming(String srcId, int type, boolean isSupportExternAlarm, int iGroup, int iItem, boolean isSurpportDelete) {
        //老版设备报警时的回调,可忽略,新版报警回调见下面方法,应用不在前台或者后台时不会响应
    }

    @Override
    public void vChangeVideoMask(int i, int i1) {

    }

    @Override
    public void vRetPlayBackPos(int i, int i1, int i2) {

    }

    @Override
    public void vRetPlayBackStatus(int i, int i1) {

    }


    @Override
    public void vGXNotifyFlag(int flag) {

    }

    @Override
    public void vRetPlaySize(int i, int i1, int i2, boolean b) {

    }

    @Override
    public void vRetPlayNumber(int i, int i1, int[] ints) {

    }

    /**
     * 设备传过来的,解码前的音视频数据,已停止回调
     * @param AudioBuffer 音频数据
     * @param AudioLen    音频长度
     * @param AudioFrames 音频帧
     * @param AudioPTS    音频PTS
     * @param VideoBuffer 视频数据
     * @param VideoLen    视频长度
     * @param VideoPTS    视频PTS
     */
    @Override
    public void vRecvAudioVideoData(byte[] AudioBuffer, int AudioLen, int AudioFrames, long AudioPTS, byte[] VideoBuffer, int VideoLen, long VideoPTS) {

    }

    /**
     * 新版报警回调,注意查看硬件接口说明
     * @param srcId 报警设备ID
     * @param type 报警类型
     * @param option 功能参数
     * @param iGroup 防区
     * @param iItem 通道
     * @param imagecounts 图片数量 以下功能需要设备支持,支持情况会在option反应
     * @param imagePath   图片在设备端的路径
     * @param alarmCapDir 报警路径
     * @param VideoPath   报警视频路径 暂不支持
     * @param sensorName  传感器名字 需要设备支持
     * @param deviceType  设备类型 高16位是子类型 低16位是主类型
     */
    @Override
    public void vAllarmingWitghTime(String srcId, int type, int option, int iGroup, int iItem, int imagecounts, String imagePath, String alarmCapDir, String VideoPath, String sensorName, int deviceType) {
        AlarmInfo info=new AlarmInfo(srcId,type,option,iGroup,iItem,imagecounts,imagePath,alarmCapDir,VideoPath,sensorName,deviceType);
        DBManager.getInstance(MyApp.app).insertAlarmInfo(info);
        RxBus.get().post(RxBUSAction.EVENT_ALARM,info);
        Log.e("dxsTest","vAllarmingWitghTime.srcId:"+srcId);
    }

    /**
     * 新的系统消息
     *
     * @param iSystemMessageType  消息类型
     * @param iSystemMessageIndex 消息索引标记
     */
    @Override
    public void vRetNewSystemMessage(int iSystemMessageType, int iSystemMessageIndex) {

    }

    @Override
    public void vRetRTSPNotify(int arg2, String msg) {
        //暂时无用
    }

    /**
     * 底层视屏渲染通知消息出口
     *
     * @param what   消息主标记 为10时是视屏渲染到屏幕,为11时表示获取设备携带的4个参数 0|1|2|3
     * @param iDesID
     * @param arg1
     * @param arg2
     * @param msgStr
     */
    @Override
    public void vRetPostFromeNative(int what, int iDesID, int arg1, int arg2,
                                    String msgStr, int channelId) {
        Log.e("dxsTest", "what:" + what + "msgStr:" + msgStr + ",channelId" + channelId);
        if (what == 10) {
            //视频渲染标记
            Intent i = new Intent();
            i.setAction(Contants.P2P.RET_P2PDISPLAY);
            i.putExtra("channelId", channelId);
            MyApp.app.sendBroadcast(i);
        } else if (what == 11) {
            //what==11表示取全景参数
            if (!TextUtils.isEmpty(msgStr)) {
                //                ELog.hdl("msgStr = " + msgStr);
                String[] split = msgStr.split("\\|");
                //                ELog.hdl(Arrays.toString(split));
                if (split.length >= 4) {
                    int cutRatio = Integer.valueOf(split[2]) & 0xFF;
                    int yValue = (Integer.valueOf(split[2]) >> 8) & 0x3FF;
                    int xValue = (Integer.valueOf(split[2]) >> 18) & 0x3FF;
                    Log.e("get_x_y_scale", "cutRatio= " + cutRatio +
                            " ;yValue= " + yValue +
                            " ;xValue= " + xValue);
                    Intent i = new Intent();
                    i.setAction(Contants.P2P.RET_P2P_PARAM);
                    i.putExtra("cutRatio", cutRatio);
                    i.putExtra("cutX", xValue);
                    i.putExtra("cutY", yValue);
                    MyApp.app.sendBroadcast(i);
                }
            }
        }
    }

    @Override
    public void vRetUserData(int i, byte b, byte b1, int[] ints) {

    }

}
